草庐IT

Swift 继承

全部标签

c++ - 理解 C++ 中的继承和多态性

假设我们有以下继承类。classA{public:voidvirtualshow(){coutshow();return0;}在不创建任何其他对象的情况下,如何调用B类的show()函数???我知道的一种方法是将C类中的show()修改为,voidshow(){B::show();cout这将首先调用B的show函数,然后打印“IamC”。但是我根本不希望C中的show()被执行。我想让B的show()直接执行。有可能吗?我们可以使用类型转换或其他方式来做到这一点吗?请记住,除了已经创建的对象(即main()中的C)之外,我不允许创建任何其他对象。我在今天的采访中被问到这个问题。谢谢!

c++ - 调用基本构造函数时是否应该复制继承构造函数的参数?

对于以下程序:#includestructFoo{Foo(){std::cout海湾合作委员会提供:$g++-std=c++17-O2-Wall-pedantic-pthreadmain.cpp&&./a.outFoo()Foo(constFoo&)~Foo()~Foo()VS2017(也在C++17模式下)给出:Foo()Foo(constFoo&)Foo(constFoo&)~Foo()~Foo()~Foo()谁是对的,为什么?(我们也不要忘记VS2017没有正确执行强制复制省略。所以它可能只是拷贝是“真实的”,但GCC根据C++17规则省略了它,而VS没有...)

c++ - TBitBtn 和 TButton 继承链发生了什么变化?

我最近开始将我的RADStudio2007项目升级到RADStudio2009。我注意到的一件事是看似简单的代码突然无法编译。示例代码:classCButtonPopupMenu{//Snippublic:voidInit(TButton*SrcButton){SrcButton->OnClick=OnButtonClick;}private:void__fastcallOnButtonClick(TObject*Sender){//Dosomebuttonclickstuff}};//SnipTButtonbutton=newTButton(this);TBitBtnbitBtn=n

c++ - 如何为类型列表中的每个继承类型调用非默认构造函数?

我正在使用boost类型列表以下列方式实现策略模式。usingnamespaceboost::mpl;template>classHost:publicinherit_linearly>::type{public:Host():m_expensiveType(/*...*/){}private:constExpensiveTypem_expensiveType;};Host类知道如何创建ExpensiveType的实例,这是一个代价高昂的操作,并且每个策略类都公开了使用它的功能。政策类将始终至少具有以下示例政策中定义的构造函数。structSamplePolicy{SamplePoli

c++ - 继承自ifstream

我可以像这样从ifstream继承并从我的派生类读取文件吗:#includeusingnamespacestd;conststringusage_str="Usage:extract";classFile:publicifstream{public:explicitFile(constchar*fname,openmodemode=in);voidextract(ostream&o);};File::File(constchar*fname,openmodemode){ifstream(fname,mode);}voidFile::extract(ostream&o){charch;c

c++ - 具有私有(private)构造函数的类私有(private)继承的工作机制

案例一:classObjectCount{private:ObjectCount(){}};classEmployee:privateObjectCount{};案例二:classObjectCount{public:ObjectCount(){}};classEmployee:privateObjectCount{};案例1:ObjectCount构造函数是私有(private)的,继承是私有(private)的。它给出了编译器错误情况2:ObjectCount构造函数是公共(public)的,继承是私有(private)的。这段代码没问题。谁能解释一下这是怎么回事?

C++单例模板类继承

我有一个抽象的单例类。我的目标是任何子类只需要实现init()函数而不是其他任何东西。这是我所做的:templateclassSingleton{public:Singleton(){init();}staticT&instance(){staticTinstance;returninstance;}protected:virtualvoidinit()=0;};classSubSingleton:publicSingleton{protected:voidinit(){cout这不会编译,因为init()是protected,不能从公共(public)静态函数调用。这个问题有2个解决

c++ - 继承和显式构造函数?

考虑以下代码:templateclassBase{Base();Base(constBase&rhs);templateexplicitBase(constBase&rhs);template::value>::type>Base(constT0&rhs);explicitBase(conststd::string&rhs);};templateclassDerived:Base{Derived();Derived(constDerived&rhs);templateDerived(constT0&rhs):Base(rhs);//Isthereawayto"inherit"theex

c++ - 在 C++ 中使用继承时避免不必要的函数声明/定义

经过长时间的C风格过程编码,我才刚刚开始“掌握”OOP。所以我怀疑可能有标准的方法来处理我所面临的情况。我有一个类层次结构如下所示的应用程序:#includeusingnamespacestd;classA{public:virtualintintf(){return0;}//OnlyneededbyBvirtualdoubledf(){return0.0;}//OnlyneededbyC};classB:publicA{intintf(){return2;}//Bobjectshavenousefordf()};classC:publicB{doubledf(){return3.14

c++继承私有(private)复制构造函数: how doesn't this yield a compile time error?

在C++中,如果我们有这个类classUncopyable{public:Uncopyable(){}~Uncopyable(){}private:Uncopyable(constUncopyable&);Uncopyable&operator=(constUncopyable&);};然后我们有一个派生类classDervied:privateUncopyable{};我的问题是:当编译器在派生类中生成默认的复制构造函数和赋值运算符时,为什么这不会生成编译时错误?生成的代码不会尝试访问基类私有(private)成员吗? 最佳答案